class Solution(object):
    def validSquare(self, p1, p2, p3, p4):
        p1 = tuple(p1)
        p2 = tuple(p2)
        p3 = tuple(p3)
        p4 = tuple(p4)
        if len({p1, p2, p3 ,p4}) < 4:
            return False
        mid = ((p1[0] + p2[0] + p3[0] + p4[0]) / 4, (p1[1] + p2[1] + p3[1] + p4[1]) / 4)
        d1 = (p1[0] - mid[0], p1[1] - mid[1])
        dist = d1[0] ** 2 + d1[1] ** 2
        if dist == 0:
            return False
        d2 = (p2[0] - mid[0], p2[1] - mid[1])
        d3 = (p3[0] - mid[0], p3[1] - mid[1])
        d4 = (p4[0] - mid[0], p4[1] - mid[1])
        if d2[0] ** 2 + d2[1] ** 2 != dist or d3[0] ** 2 + d3[1] ** 2 != dist or d4[0] ** 2 + d4[1] ** 2 != dist:
            return False
        c = 0
        d = 0
        if d1[0] * d2[0] + d1[1] * d2[1] == 0:
            c += 1
        else:
            if d1[0] == - d2[0] and d1[1] == - d2[1]:
                d += 1
            else:
                return False
        if d1[0] * d3[0] + d1[1] * d3[1] == 0:
            c += 1
        else:
            if d1[0] == - d3[0] and d1[1] == - d3[1]:
                d += 1
            else:
                return False
        if d1[0] * d4[0] + d1[1] * d4[1] == 0:
            c += 1
        else:
            if d1[0] == - d4[0] and d1[1] == - d4[1]:
                d += 1
            else:
                return False
        return c == 2 and d == 1

data = Solution()
p1 = [0, 0]
p2 = [1, 1]
p3 = [1, 0]
p4 = [0, 1]
print(data.validSquare(p1, p2, p3, p4))